/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller.administration;

import static controller.Connexion.CONF_DAO_INIT;
import static controller.administration.AssociationCours.VUE_ADMINISTRATION_ACCUEIL;
import static controller.administration.SaisieNotes.ATT_GESTION_COURS;
import dao.DAOInit;
import dao.interfaces.DAOCours;
import dao.interfaces.DAOExamen;
import gestionform.GestionCours;
import gestionform.GestionExamen;
import gestionform.GestionFormCoursExamen;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import model.Cour;
import model.Enseignant;
import model.Examen;

/**
 *
 * @author Paul
 */
public class GestionCoursExamen extends HttpServlet {

    public static final String VUE_GESTION_COURS = "/WEB-INF/administration/gestionCours.jsp";
    public static final String ATT_GESTION_COURS_EXAMEN = "gCoursExamen";
    public static final String ATT_GESTION_ETUDIANT = "gEtudiant";
    public static final String ATT_GESTION_EXAMEN = "gExamen";
    private DAOCours daoCours;
    private DAOExamen daoExamen;

    @Override
    public void init() throws ServletException {
        /* Récupération d'une instance de notre DAO Personne */
        this.daoCours = ((DAOInit) getServletContext().getAttribute(CONF_DAO_INIT)).getDAOCours();
        this.daoExamen = ((DAOInit) getServletContext().getAttribute(CONF_DAO_INIT)).getDAOExamen();
    }

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Enseignant ens = (Enseignant) request.getSession().getAttribute("enseignant");
        if (ens != null) {
            if (request.getSession().getAttribute("listeCours") != null
                    && request.getSession().getAttribute("listeExamens") != null
                    && request.getParameter("retourAdministration") != null) {
                this.getServletContext().getRequestDispatcher(VUE_ADMINISTRATION_ACCUEIL).forward(request, response);
            } else if (request.getSession().getAttribute("listeCours") != null
                    && request.getSession().getAttribute("listeExamens") != null
                    && request.getParameter("retourAdministration") == null) {
                this.getServletContext().getRequestDispatcher(VUE_GESTION_COURS).forward(request, response);
            } else {
                GestionCours gCours = new GestionCours(daoCours);
                HttpSession session = request.getSession(true);
                ArrayList<Cour> listeCours = gCours.getListeCoursEnseignant(ens.getId());
                if (!gCours.getErreurs().isEmpty()) {
                    request.setAttribute(ATT_GESTION_COURS, gCours);
                } else {
                    session.setAttribute("listeCours", listeCours);
                    GestionExamen gExamen = new GestionExamen(daoExamen);
                    ArrayList<Examen> listeExamens = new ArrayList<Examen>();
                    for (Cour cour : listeCours) {
                        listeExamens = gExamen.getExamens(cour.getIdCour());
                    }
                    if (!gExamen.getErreurs().isEmpty()) {
                        request.setAttribute(ATT_GESTION_EXAMEN, gExamen);
                    } else {
                        session.setAttribute("listeExamens", listeExamens);
                    }
                }
                this.getServletContext().getRequestDispatcher(VUE_GESTION_COURS).forward(request, response);
            }

        } else {
            request.getRequestDispatcher("../view/connexion.jsp").forward(request, response);
        }
    }

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Enseignant ens = (Enseignant) request.getSession().getAttribute("enseignant");
        if (ens != null) {
            GestionFormCoursExamen gCoursExamen = new GestionFormCoursExamen();
            gCoursExamen.checkActionForm(request);
            if (gCoursExamen.getErreurs().isEmpty()) {
                if (gCoursExamen.isCreationCours() || gCoursExamen.isSupprimerCours()) {
                    GestionCours gCours = new GestionCours(daoCours);
                    if (gCoursExamen.isCreationCours()) {
                        gCours.createCours(request, ens.getId());
                    } else if (gCoursExamen.isSupprimerCours()) {
                        gCours.deleteCours(request, ens.getId());
                    }
                    request.setAttribute(ATT_GESTION_COURS, gCours);
                } else if (gCoursExamen.isCreationExamen() || gCoursExamen.isSupprimerExamen()) {
                    GestionExamen gExamen = new GestionExamen(daoExamen);
                    if (gCoursExamen.isCreationExamen()) {
                        gExamen.createExamen(request, ens.getId());
                    } else if (gCoursExamen.isSupprimerExamen()) {
                        gExamen.deleteExamen(request, ens.getId());
                    }
                    request.setAttribute(ATT_GESTION_EXAMEN, gExamen);
                }
            }
            request.setAttribute(ATT_GESTION_COURS_EXAMEN, gCoursExamen);
            this.getServletContext().getRequestDispatcher(VUE_GESTION_COURS).forward(request, response);

        } else {
            this.getServletContext().getRequestDispatcher("view/connexion.jsp").forward(request, response);
        }

    }
}
